//给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 
//
// 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 
//
// 
//
// 示例 1： 
//
// 
//输入：nums = [2,2,3,2]
//输出：3
// 
//
// 示例 2： 
//
// 
//输入：nums = [0,1,0,1,0,1,99]
//输出：99
// 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 3 * 10⁴ 
// -2³¹ <= nums[i] <= 2³¹ - 1 
// nums 中，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 
// 
//
// Related Topics 位运算 数组 👍 1266 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2024-12-16 09:31:58
 * @description 137.只出现一次的数字 II
 
 */
 
public class SingleNumberIi {
    public static void main(String[] args) {
    //测试代码
    SingleNumberIi fun = new SingleNumberIi();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
        /*
        *
        * 因为所有元素都是32位的，每个数的第i位，一定出现了3次，但是答案只出现了一次
        * 因此遍历32位，如果某一位的和是3的倍数，则答案该位置是0
        * 否则是1*/
    public int singleNumber(int[] nums) {
        int res=0;
        for (int i = 0; i < 32; i++) {
            int total=0;
            for (int num : nums) {
                total+=((num>>>i)&1);
            }
            if(total%3!=0) res|=1<<i;
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
